package teste;
import java.io.File;

import br.unisul.redeNeural.Configuracao;
import br.unisul.redeNeural.ConfiguracaoCamadaIntemediaria;
import br.unisul.redeNeural.FuncaoAtivacao;
import br.unisul.redeNeural.Iteracoes;
import br.unisul.redeNeural.MLP;
import br.unisul.redeNeural.ParTreino;
import br.unisul.redeNeural.RedeNeural;
import br.unisul.redeNeural.RedeNeuralException;
import br.unisul.util.Ferramentas;
import br.unisul.util.LeituraArquivo;


public class TesteLetrasMLP {
	
	static int contaAcertos;
	static int contaErros;
	
	public static void main(String[] args) {
		Configuracao configuracao = new Configuracao(63,3);
		configuracao.setSuportaVies(true);
		configuracao.setTaxaAprendizado(.5);
		configuracao.addCamadaIntermediaria(new ConfiguracaoCamadaIntemediaria(7));
		

		ParTreino p = new ParTreino(configuracao);
		inicialiazar(p);
		
		RedeNeural n = new MLP(configuracao, MLP.BIPOLAR);
		n.setTestePara(new Iteracoes(500));
		try {
			n.treinar(p);
		} catch (RedeNeuralException e1) {
			e1.printStackTrace();
		}
		try {
//			Ferramentas.salvarConfiguracoes(configuracao, new File("MLP.conf"));
//			Ferramentas.salvarParTreino(p, new File("MLP.par"));
//			Ferramentas.salvarRedeNeural(n, new File("MLP.rna"));
		} catch (Exception e1) {
			e1.printStackTrace();
		}
		
		try {
			FuncaoAtivacao f = new FuncaoAtivacao(){
				private static final long serialVersionUID = -6811683164896040064L;

				public double funcao(double valor) {
					if(valor > 0.0){
						return 1;
					}else{
						return -1;
					}
				}
			};
			System.out.println(Ferramentas.verificarSaida(Ferramentas.aplicarFuncaoAtivacao(f,n.verificarSaidas( p.getEntradas()))
					, p.getSaidas()));
		} catch (RedeNeuralException e) {
			e.printStackTrace();
		}
		
	}
	
	public static void inicialiazar(ParTreino p){
		double s[][] = new double[21][63];
		
		String arquivo = "arquivos\\file";
		String extensao = ".txt";
		LeituraArquivo leitura = new LeituraArquivo();
		int entrada = 0;
		for (int i = 0; i < s.length; i++) {
			String local = (entrada+i<10) ? arquivo+"0"+(entrada + i)+extensao : arquivo+(entrada+i)+extensao;
			leitura.setFile(new File(local));
			s[i] = leitura.toArray(9, 7);
		}
		double [][] saidas ={ 
				{-1,-1,-1}, //a
				{-1,-1,1}, //b
				{-1,1,-1}, //c
				{-1,1,1}, //d
				{1,-1,-1}, //e
				{1,-1,1}, //j
				{1,1,-1} };//k
		for (int i = 0; i < s.length; i++) {
			p.adicionaPar(s[i], saidas[i%7]);
		}
	}
	
}
